package cn.patient.pp.module.report.dal.mysql.report;

import java.util.*;

import cn.patient.pp.framework.common.pojo.PageResult;
import cn.patient.pp.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.patient.pp.framework.mybatis.core.mapper.BaseMapperX;
import cn.patient.pp.module.report.controller.admin.vo.PatientInfoPageReqVO;
import cn.patient.pp.module.report.dal.dataobject.report.PatientInfoDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;


/**
 * 上报精神病患者信息 Mapper
 *
 * @author 超级管理员
 */
@Mapper
public interface ReportMapper extends BaseMapperX<PatientInfoDO> {

    default PageResult<PatientInfoDO> selectPage(PatientInfoPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<PatientInfoDO>()
                .likeIfPresent(PatientInfoDO::getPatientName, reqVO.getPatientName())
                .eqIfPresent(PatientInfoDO::getIdNumber, reqVO.getIdNumber())
                .eqIfPresent(PatientInfoDO::getGender, reqVO.getGender())
                .betweenIfPresent(PatientInfoDO::getBirthDate, reqVO.getBirthDate())
                .eqIfPresent(PatientInfoDO::getAddress, reqVO.getAddress())
                .eqIfPresent(PatientInfoDO::getContactPerson, reqVO.getContactPerson())
                .eqIfPresent(PatientInfoDO::getContactPhone, reqVO.getContactPhone())
                .eqIfPresent(PatientInfoDO::getDiagnosisStatus, reqVO.getDiagnosisStatus())
                .eqIfPresent(PatientInfoDO::getDeptId, reqVO.getDeptId())
                .eqIfPresent(PatientInfoDO::getReportStatus, reqVO.getReportStatus())
                .betweenIfPresent(PatientInfoDO::getReportTime, reqVO.getReportTime())
                .eqIfPresent(PatientInfoDO::getReportResponse, reqVO.getReportResponse())
                .eqIfPresent(PatientInfoDO::getRemark, reqVO.getRemark())
                .betweenIfPresent(PatientInfoDO::getCreateTime, reqVO.getCreateTime())
                .inIfPresent(PatientInfoDO::getOrginDeptId, reqVO.getOrginDeptId())
                .orderBySql("CASE WHEN diagnosis_status IS NULL THEN 0 ELSE 1 END ASC, report_time DESC")
                .orderByDesc(PatientInfoDO::getId));
    }
    default PageResult<PatientInfoDO> selectPageByCountry(PatientInfoPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<PatientInfoDO>()
                .likeIfPresent(PatientInfoDO::getPatientName, reqVO.getPatientName())
                .eqIfPresent(PatientInfoDO::getIdNumber, reqVO.getIdNumber())
                .eqIfPresent(PatientInfoDO::getGender, reqVO.getGender())
                .betweenIfPresent(PatientInfoDO::getBirthDate, reqVO.getBirthDate())
                .eqIfPresent(PatientInfoDO::getAddress, reqVO.getAddress())
                .eqIfPresent(PatientInfoDO::getContactPerson, reqVO.getContactPerson())
                .eqIfPresent(PatientInfoDO::getContactPhone, reqVO.getContactPhone())
                .eqIfPresent(PatientInfoDO::getDiagnosisStatus, reqVO.getDiagnosisStatus())
                .eqIfPresent(PatientInfoDO::getDeptId, reqVO.getDeptId())
                .neIfPresent(PatientInfoDO::getReportStatus, "2")
                .betweenIfPresent(PatientInfoDO::getReportTime, reqVO.getReportTime())
                .eqIfPresent(PatientInfoDO::getReportResponse, reqVO.getReportResponse())
                .eqIfPresent(PatientInfoDO::getRemark, reqVO.getRemark())
                .betweenIfPresent(PatientInfoDO::getCreateTime, reqVO.getCreateTime())
                .inIfPresent(PatientInfoDO::getOrginDeptId, reqVO.getOrginDeptId())
                .orderBySql("CASE WHEN diagnosis_status IS NULL THEN 0 ELSE 1 END ASC, report_time DESC")
                .orderByDesc(PatientInfoDO::getId));
    }
        Integer batchUpdatePatients(@Param("idNumbers") Set<String> idNumbers,
                                 @Param("reportStatus") String reportStatus);

    default List<PatientInfoDO> selectPatient(PatientInfoDO reqVO) {
        return selectList(new LambdaQueryWrapperX<PatientInfoDO>()
                .likeIfPresent(PatientInfoDO::getPatientName, reqVO.getPatientName())
                .eqIfPresent(PatientInfoDO::getIdNumber, reqVO.getIdNumber())
                .eqIfPresent(PatientInfoDO::getGender, reqVO.getGender())
                .eqIfPresent(PatientInfoDO::getAddress, reqVO.getAddress())
                .eqIfPresent(PatientInfoDO::getContactPerson, reqVO.getContactPerson())
                .eqIfPresent(PatientInfoDO::getContactPhone, reqVO.getContactPhone())
                .eqIfPresent(PatientInfoDO::getDiagnosisStatus, reqVO.getDiagnosisStatus())
                .eqIfPresent(PatientInfoDO::getDeptId, reqVO.getDeptId())
                .neIfPresent(PatientInfoDO::getReportStatus, reqVO.getReportStatus())
                .eqIfPresent(PatientInfoDO::getReportResponse, reqVO.getReportResponse())
                .eqIfPresent(PatientInfoDO::getRemark, reqVO.getRemark())
                .inIfPresent(PatientInfoDO::getOrginDeptId, reqVO.getOrginDeptId())
                .orderByDesc(PatientInfoDO::getId));
    }
    List<PatientInfoDO> selectPatientIsExist(@Param("reqVO") PatientInfoDO reqVO);


}